package com.company.template;

/**
 * 抽象模板角色，JDBC抽象模板
 * JDBC流程，固定流程：注册驱动->获取连接->创建Statement->执行SQL语句->处理结果集->处理异常并关闭JDBC对象资源
 */
public abstract class JDBCTemplate {

    /**
     * 流程模板方法，保证所有数据库的流程都一致
     * 方法使用final修饰，防止子类重写父类方法改变方法执行顺序
     */
    public final void process(){
        //1.注册驱动Register driver
        registerDriver();
        //2.获取连接
        getConnection();
        //3.创建Statement
        createStatement();
        //4.执行SQL语句
        executeSQL();
        //5.处理结果集
        handleResultSet();
        //6.处理异常并关闭JDBC对象资源
        closeResource();
    }


    /**
     * 基本方法，数据库驱动都不一样
     */
    public abstract void registerDriver();

    /**
     * 基本方法，数据库连接都不一样
     */
    public abstract void getConnection();

    /**
     * 基本方法，所有数据库都需要创建Statement
     */
    public void createStatement(){
        System.out.println("创建Statement");
    }

    /**
     * 基本方法，不用数据库SQL语法不一样
     */
    public abstract void executeSQL();

    /**
     * 基本方法，所有数据库都需要处理结果集
     */
    public void handleResultSet(){
        System.out.println("处理结果集");
    }

    /**
     * 基本方法，所有数据库都需要处理异常并关闭JDBC对象资源
     */
    public void closeResource(){
        System.out.println("处理异常并关闭JDBC对象资源");
    }
}
